(* color2string est une fonction definie dans le fichier
   contours.ml *)

(*
  Principe de coord2string : d'apres les composantes de coordonnees et
  la couleur (triplet d'entier) passees en parametre, on renvoie une
  string contenant un triplet, qui contient les coordonnees et la
  couleur passees en parametre.
*)

let coord2string i h color = "(" ^ (string_of_int i) ^ "," ^
  (string_of_int h) ^ "," ^ (color2string(color)) ^ ")\n"

let coord2obj i h z = 
    "v " ^ (string_of_int i) ^ " " ^ (string_of_int h) ^ " " ^ z ^ "\n"
(*
  Principe de diagonalisation : on echantillonne l'image passee en
  parametre grace au nombre passe en parametre dans la variable
  param. On ecrit dans le fichier file passee en parametre la liste
  des coordonnees des points d'intersection qui creent les triangles.
*)

let rec getZ color = function
      [] -> "0"
    | ((e,z)::l) when e = color -> z
    | ((e,z)::l) -> getZ color l

let diagonalisation imgOri image param file =
  let get_width (w, h) = w in
  let get_height (w, h) = h in
  let dico = !dictionnaire in
    if param < 3 then failwith "Parametre de diagonalisation trop
  petit!" ;
    for i = 0 to (get_width (get_dims image) - 1) do
      for h = 0 to (get_height (get_dims image)) do
	if ((i mod param = 0) || (h mod param = 0)) then
	  begin
	    if ((i mod param = 0) && (h mod param = 0)) then
	      output_string file (coord2obj i h (getZ
				(Sdlvideo.get_pixel_color imgOri i h) dico)) ;
	    Sdlvideo.put_pixel_color image i h (0, 0, 0) ;
	  end
	else
	  if ((i mod param) = (h mod param)) then
	    Sdlvideo.put_pixel_color image i h (0, 0, 0) ;
      done
    done ;
    output_string file "\n" ;;

(* End of File *)
